/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package asfabdesk.dominio;

import java.io.File;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.UniqueConstraint;

/**
 *
 * @author Marco Aurélio
 */
@Entity
@NamedQueries(value = {
    @NamedQuery(name = "AssociadoPorNomeCpf", query = "SELECT a FROM Associado a WHERE upper(a.nome) LIKE upper(?) AND a.cpf LIKE (?)"),
    @NamedQuery(name = "AssociadoPorCpf", query = "SELECT a FROM Associado a WHERE a.cpf LIKE (?)"),
    @NamedQuery(name = "AssociadoPorRol", query = "SELECT a FROM Associado a WHERE rol = ?"),
    @NamedQuery(name = "AssociadoPorMatricula", query = "SELECT a FROM Associado a WHERE a.matricula LIKE (?)"),
    @NamedQuery(name = "AssociadoPorIdentidade", query = "SELECT a FROM Associado a WHERE a.rg LIKE (?)"),
    @NamedQuery(name = "AssociadosPorCargo", query = "SELECT a FROM Associado a WHERE a.cargo LIKE (?)"),
    @NamedQuery(name = "AssociadosPorLotacao", query = "SELECT a FROM Associado a WHERE a.lotacao LIKE (?)"),
    @NamedQuery(name = "AssociadosPorNome", query = "SELECT a FROM Associado a WHERE upper(a.nome) LIKE upper(?) ORDER BY rol"),
    @NamedQuery(name = "AssociadosPorSecretaria", query = "SELECT a FROM Associado a WHERE a.secretaria =? ORDER BY rol"),
    @NamedQuery(name = "AssociadosPorSecretariaCategoriaVinculo", query = "SELECT a FROM Associado a WHERE a.secretaria =? AND a.categoriaVinculo=? ORDER BY rol"),
    @NamedQuery(name = "AssociadosPorSecretariaCategoriaVinculoComissionado", query = "SELECT a FROM Associado a WHERE a.secretaria =? AND a.categoriaVinculo=? AND a.cargoComissionado=? ORDER BY rol"),
    @NamedQuery(name = "AssociadosPorSecretariaComissionado", query = "SELECT a FROM Associado a WHERE a.secretaria =? AND a.categoriaVinculo=? AND a.cargoComissionado=? ORDER BY rol"),
    @NamedQuery(name = "AssociadosPorCategoriaVinculo", query = "SELECT a FROM Associado a WHERE a.categoriaVinculo=? ORDER BY rol"),
    @NamedQuery(name = "AssociadosPorCategoriaVinculoComissionado", query = "SELECT a FROM Associado a WHERE a.categoriaVinculo=? AND a.cargoComissionado=? ORDER BY rol"),
    @NamedQuery(name = "AssociadosPorComissionado", query = "SELECT a FROM Associado a WHERE a.cargoComissionado=? ORDER BY rol"),
    @NamedQuery(name = "AssociadosPorSecretariaStatus", query = "SELECT a FROM Associado a WHERE a.secretaria =? AND a.ativo=? ORDER BY rol"),
    @NamedQuery(name = "AssociadosPorSecretariaCategoriaVinculoStatus", query = "SELECT a FROM Associado a WHERE a.secretaria =? AND a.categoriaVinculo=? AND a.ativo=? ORDER BY rol"),
    @NamedQuery(name = "AssociadosPorSecretariaCategoriaVinculoComissionadoStatus", query = "SELECT a FROM Associado a WHERE a.secretaria =? AND a.categoriaVinculo=? AND a.cargoComissionado=? AND a.ativo=? ORDER BY rol"),
    @NamedQuery(name = "AssociadosPorSecretariaComissionadoStatus", query = "SELECT a FROM Associado a WHERE a.secretaria =? AND a.categoriaVinculo=? AND a.cargoComissionado=? AND a.ativo=? ORDER BY rol"),
    @NamedQuery(name = "AssociadosPorCategoriaVinculoStatus", query = "SELECT a FROM Associado a WHERE a.categoriaVinculo=? AND a.ativo=? ORDER BY rol"),
    @NamedQuery(name = "AssociadosPorCategoriaVinculoComissionadoStatus", query = "SELECT a FROM Associado a WHERE a.categoriaVinculo=? AND a.cargoComissionado=? AND a.ativo=? ORDER BY rol"),
    @NamedQuery(name = "AssociadosPorComissionadoStatus", query = "SELECT a FROM Associado a WHERE a.cargoComissionado=? AND a.ativo=? ORDER BY rol"),
    @NamedQuery(name = "AssociadosPorStatus", query = "SELECT a FROM Associado a WHERE a.ativo=? ORDER BY rol"),
    @NamedQuery(name = "AssociadoPorCpfEdt", query = "SELECT a FROM Associado a WHERE a.cpf LIKE (?) AND a.id != ?"),
    @NamedQuery(name = "AssociadoPorRolEdt", query = "SELECT a FROM Associado a WHERE rol = ? AND a.id != ?"),
    @NamedQuery(name = "AssociadoPorMatriculaEdt", query = "SELECT a FROM Associado a WHERE a.matricula LIKE (?) AND a.id != ?"),
    @NamedQuery(name = "AssociadoPorIdentidadeEdt", query = "SELECT a FROM Associado a WHERE a.rg LIKE (?) AND a.id != ?"),
    @NamedQuery(name = "AssociadosParaContribuicao", query = "SELECT a FROM Associado a WHERE a.dataFiliacao <=? and a.ativo=true ORDER BY  a.nome "),
    @NamedQuery(name = "MAXROL", query = "SELECT  MAX(a.rol) FROM Associado a")
})
@Table(uniqueConstraints = {
    @UniqueConstraint(columnNames = {"rol", "matricula"})})
public class Associado implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue
    @Column(name = "ID")
    private long Id;
    private String nome;
    @Column(name = "DATA_NASC")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataNasc;
    @Column(name = "DATA_FILIACAO")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataFiliacao;
    private String nacionalidade;
    private String naturalidade;
    private String rg;
    @Column(name = "ORGAO_EXPEDIDOR")
    private String orgaoExpedidor;
    private String cpf;
    @Column(name = "TITULO_ELEITOR")
    private String tituloEleitor;
    @Column(name = "ZONA_ELEITORAL")
    private String zonaEleitoral;
    @Column(name = "SECAO_ELEITORAL")
    private String secaoEleitoral;
    @Column(name = "NOME_PAI")
    private String nomePai;
    @Column(name = "NOME_MAE")
    private String nomeMae;
    private String logradouro;
    @Column(name = "numero_end")
    private String numeroEnd;
    private String complemento;
    private String bairro;
    private String cep;
    private String tel1;
    private String tel2;
    private String cel1;
    private String cel2;
    private String email;
    @Column(name = "localizacao_fisica")
    private String localizacaoFisica;
    private boolean ativo = true; // ativo ou inativo
    private boolean deletado = false;
    private long rol;
    private String matricula;
    private boolean cargoComissionado; // sim ou nao
    private String lotacao;
    private String funcao;
    private String cargo;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataAdmissaoPMAB;
    @JoinColumn(name = "CATEGORIA_VINCULO", referencedColumnName = "id")
    @ManyToOne
    private CategoriaVinculo categoriaVinculo;
    @JoinColumn(name = "SECRETARIA", referencedColumnName = "id")
    @ManyToOne
    private Secretaria secretaria;
    @JoinColumn(name = "CIDADE_UF", referencedColumnName = "id")
    @ManyToOne
    private CidadeUf cidadeUf;
    @JoinColumn(name = "USUARIOS", referencedColumnName = "id")
    @ManyToOne
    private Usuario usuarioCadastrante; // funcionario ASFAB   
    private String sexo;    
    @Lob
    private byte[] foto ;

    public Associado() {
    }

    public long getId() {
        return Id;
    }

    public void setId(long Id) {
        this.Id = Id;
    }

    public boolean isAtivo() {
        return ativo;
    }

    public void setAtivo(boolean ativo) {
        this.ativo = ativo;
    }

    public String getBairro() {
        return bairro;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public String getCargo() {
        return cargo;
    }

    public void setCargo(String cargo) {
        this.cargo = cargo;
    }

    public boolean isCargoComissionado() {
        return cargoComissionado;
    }

    public void setCargoComissionado(boolean cargoComissionado) {
        this.cargoComissionado = cargoComissionado;
    }

    public CategoriaVinculo getCategoriaVinculo() {
        return categoriaVinculo;
    }

    public void setCategoriaVinculo(CategoriaVinculo categoriaVinculo) {
        this.categoriaVinculo = categoriaVinculo;
    }

    public String getCel1() {
        return cel1;
    }

    public void setCel1(String cel1) {
        this.cel1 = cel1;
    }

    public String getCel2() {
        return cel2;
    }

    public void setCel2(String cel2) {
        this.cel2 = cel2;
    }

    public String getCep() {
        return cep;
    }

    public void setCep(String cep) {
        this.cep = cep;
    }

    public CidadeUf getCidadeUf() {
        return cidadeUf;
    }

    public void setCidadeUf(CidadeUf cidadeUf) {
        this.cidadeUf = cidadeUf;
    }

    public String getComplemento() {
        return complemento;
    }

    public void setComplemento(String complemento) {
        this.complemento = complemento;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public Date getDataAdmissaoPMAB() {
        return dataAdmissaoPMAB;
    }

    public void setDataAdmissaoPMAB(Date dataAdmissaoPMAB) {
        this.dataAdmissaoPMAB = dataAdmissaoPMAB;
    }

    public Date getDataFiliacao() {
        return dataFiliacao;
    }

    public void setDataFiliacao(Date dataFiliacao) {
        this.dataFiliacao = dataFiliacao;
    }

    public Date getDataNasc() {
        return dataNasc;
    }

    public void setDataNasc(Date dataNasc) {
        this.dataNasc = dataNasc;
    }

    public boolean isDeletado() {
        return deletado;
    }

    public void setDeletado(boolean deletado) {
        this.deletado = deletado;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getFuncao() {
        return funcao;
    }

    public void setFuncao(String funcao) {
        this.funcao = funcao;
    }

    public String getLocalizacaoFisica() {
        return localizacaoFisica;
    }

    public void setLocalizacaoFisica(String localizacaoFisica) {
        this.localizacaoFisica = localizacaoFisica;
    }

    public String getLogradouro() {
        return logradouro;
    }

    public void setLogradouro(String logradouro) {
        this.logradouro = logradouro;
    }

    public String getLotacao() {
        return lotacao;
    }

    public void setLotacao(String lotacao) {
        this.lotacao = lotacao;
    }

    public String getMatricula() {
        return matricula;
    }

    public void setMatricula(String matricula) {
        this.matricula = matricula;
    }

    public String getNacionalidade() {
        return nacionalidade;
    }

    public void setNacionalidade(String nacionalidade) {
        this.nacionalidade = nacionalidade;
    }

    public String getNaturalidade() {
        return naturalidade;
    }

    public void setNaturalidade(String naturalidade) {
        this.naturalidade = naturalidade;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getNomeMae() {
        return nomeMae;
    }

    public void setNomeMae(String nomeMae) {
        this.nomeMae = nomeMae;
    }

    public String getNomePai() {
        return nomePai;
    }

    public void setNomePai(String nomePai) {
        this.nomePai = nomePai;
    }

    public String getNumeroEnd() {
        return numeroEnd;
    }

    public void setNumeroEnd(String numeroEnd) {
        this.numeroEnd = numeroEnd;
    }

    public String getOrgaoExpedidor() {
        return orgaoExpedidor;
    }

    public void setOrgaoExpedidor(String orgaoExpedidor) {
        this.orgaoExpedidor = orgaoExpedidor;
    }

    public String getRg() {
        return rg;
    }

    public void setRg(String rg) {
        this.rg = rg;
    }

    public long getRol() {
        return rol;
    }

    public void setRol(long rol) {
        this.rol = rol;
    }

    public String getSecaoEleitoral() {
        return secaoEleitoral;
    }

    public void setSecaoEleitoral(String secaoEleitoral) {
        this.secaoEleitoral = secaoEleitoral;
    }

    public Secretaria getSecretaria() {
        return secretaria;
    }

    public void setSecretaria(Secretaria secretaria) {
        this.secretaria = secretaria;
    }

    public String getTel1() {
        return tel1;
    }

    public void setTel1(String tel1) {
        this.tel1 = tel1;
    }

    public String getTel2() {
        return tel2;
    }

    public void setTel2(String tel2) {
        this.tel2 = tel2;
    }

    public String getTituloEleitor() {
        return tituloEleitor;
    }

    public void setTituloEleitor(String tituloEleitor) {
        this.tituloEleitor = tituloEleitor;
    }

    public Usuario getUsuarioCadastrante() {
        return usuarioCadastrante;
    }

    public void setUsuarioCadastrante(Usuario usuarioCadastrante) {
        this.usuarioCadastrante = usuarioCadastrante;
    }

    public String getZonaEleitoral() {
        return zonaEleitoral;
    }

    public void setZonaEleitoral(String zonaEleitoral) {
        this.zonaEleitoral = zonaEleitoral;
    }

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public byte[] getFoto() {
        return foto;
    }

    public void setFoto(byte[] img) {
        this.foto = img;
    }
}
